home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Mac OS SDK / Dev.CD Jan 98 SDK1.toast / Development Kits (Disc 1) / Interfaces&Libraries / Universal / Interfaces / PInterfaces / TextCommon.p < prev    next >
Encoding:
Text File  |  1997-08-12  |  15.3 KB  |  352 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        TextCommon.p
  3.  
  4.      Contains:    Common text types and constants and prototypes for related functions 
  5.  
  6.      Version:    Technology:    Mac OS 8 (Tempo)
  7.                  Release:    Universal Interfaces 3.0.1
  8.  
  9.      Copyright:    © 1995-1997 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT TextCommon;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __TEXTCOMMON__}
  28. {$SETC __TEXTCOMMON__ := 1}
  29.  
  30. {$I+}
  31. {$SETC TextCommonIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __TYPES__}
  35. {$I Types.p}
  36. {$ENDC}
  37.  
  38.  
  39. {$PUSH}
  40. {$ALIGN MAC68K}
  41. {$LibExport+}
  42.  
  43. {  LocaleIdentifier is an obsolete Copland typedef, will be removed soon }
  44.  
  45. TYPE
  46.     LocaleIdentifier                    = UInt32;
  47. { TextEncodingBase type & values }
  48. { (values 0-32 correspond to the Script Codes defined in Inside Macintosh: Text pages 6-52 and 6-53 }
  49.     TextEncodingBase                    = UInt32;
  50.  
  51. CONST
  52.                                                                 {  Mac OS encodings }
  53.     kTextEncodingMacRoman        = 0;
  54.     kTextEncodingMacJapanese    = 1;
  55.     kTextEncodingMacChineseTrad    = 2;
  56.     kTextEncodingMacKorean        = 3;
  57.     kTextEncodingMacArabic        = 4;
  58.     kTextEncodingMacHebrew        = 5;
  59.     kTextEncodingMacGreek        = 6;
  60.     kTextEncodingMacCyrillic    = 7;
  61.     kTextEncodingMacDevanagari    = 9;
  62.     kTextEncodingMacGurmukhi    = 10;
  63.     kTextEncodingMacGujarati    = 11;
  64.     kTextEncodingMacOriya        = 12;
  65.     kTextEncodingMacBengali        = 13;
  66.     kTextEncodingMacTamil        = 14;
  67.     kTextEncodingMacTelugu        = 15;
  68.     kTextEncodingMacKannada        = 16;
  69.     kTextEncodingMacMalayalam    = 17;
  70.     kTextEncodingMacSinhalese    = 18;
  71.     kTextEncodingMacBurmese        = 19;
  72.     kTextEncodingMacKhmer        = 20;
  73.     kTextEncodingMacThai        = 21;
  74.     kTextEncodingMacLaotian        = 22;
  75.     kTextEncodingMacGeorgian    = 23;
  76.     kTextEncodingMacArmenian    = 24;
  77.     kTextEncodingMacChineseSimp    = 25;
  78.     kTextEncodingMacTibetan        = 26;
  79.     kTextEncodingMacMongolian    = 27;
  80.     kTextEncodingMacEthiopic    = 28;
  81.     kTextEncodingMacCentralEurRoman = 29;
  82.     kTextEncodingMacVietnamese    = 30;
  83.     kTextEncodingMacExtArabic    = 31;                            {  The following use script code 0, smRoman }
  84.     kTextEncodingMacSymbol        = 33;
  85.     kTextEncodingMacDingbats    = 34;
  86.     kTextEncodingMacTurkish        = 35;
  87.     kTextEncodingMacCroatian    = 36;
  88.     kTextEncodingMacIcelandic    = 37;
  89.     kTextEncodingMacRomanian    = 38;                            {  The following use script code 4, smArabic }
  90.     kTextEncodingMacFarsi        = $8C;                            {  Like MacArabic but uses Farsi digits }
  91.                                                                 {  The following use script code 7, smCyrillic }
  92.     kTextEncodingMacUkrainian    = $98;                            {  The following use script code 32, smUnimplemented }
  93.     kTextEncodingMacVT100        = $FC;                            {  VT100/102 font from Comm Toolbox: Latin-1 repertoire + box drawing etc }
  94.                                                                 {  Special Mac OS encodings }
  95.     kTextEncodingMacHFS            = $FF;                            {  Meta-value, should never appear in a table. }
  96.                                                                 {  Unicode & ISO UCS encodings begin at 0x100 }
  97.     kTextEncodingUnicodeDefault    = $0100;                        {  Meta-value, should never appear in a table. }
  98.     kTextEncodingUnicodeV1_1    = $0101;
  99.     kTextEncodingISO10646_1993    = $0101;                        {  Code points identical to Unicode 1.1 }
  100.     kTextEncodingUnicodeV2_0    = $0103;                        {  New location for Korean Hangul }
  101.                                                                 {  ISO 8-bit and 7-bit encodings begin at 0x200 }
  102.     kTextEncodingISOLatin1        = $0201;                        {  ISO 8859-1 }
  103.     kTextEncodingISOLatin2        = $0202;                        {  ISO 8859-2 }
  104.     kTextEncodingISOLatinCyrillic = $0205;                        {  ISO 8859-5 }
  105.     kTextEncodingISOLatinArabic    = $0206;                        {  ISO 8859-6, = ASMO 708, =DOS CP 708 }
  106.     kTextEncodingISOLatinGreek    = $0207;                        {  ISO 8859-7 }
  107.     kTextEncodingISOLatinHebrew    = $0208;                        {  ISO 8859-8 }
  108.     kTextEncodingISOLatin5        = $0209;                        {  ISO 8859-9 }
  109.                                                                 {  MS-DOS & Windows encodings begin at 0x400 }
  110.     kTextEncodingDOSLatinUS        = $0400;                        {  code page 437 }
  111.     kTextEncodingDOSGreek        = $0405;                        {  code page 737 (formerly code page 437G) }
  112.     kTextEncodingDOSBalticRim    = $0406;                        {  code page 775 }
  113.     kTextEncodingDOSLatin1        = $0410;                        {  code page 850, "Multilingual" }
  114.     kTextEncodingDOSGreek1        = $0411;                        {  code page 851 }
  115.     kTextEncodingDOSLatin2        = $0412;                        {  code page 852, Slavic }
  116.     kTextEncodingDOSCyrillic    = $0413;                        {  code page 855, IBM Cyrillic }
  117.     kTextEncodingDOSTurkish        = $0414;                        {  code page 857, IBM Turkish }
  118.     kTextEncodingDOSPortuguese    = $0415;                        {  code page 860 }
  119.     kTextEncodingDOSIcelandic    = $0416;                        {  code page 861 }
  120.     kTextEncodingDOSHebrew        = $0417;                        {  code page 862 }
  121.     kTextEncodingDOSCanadianFrench = $0418;                        {  code page 863 }
  122.     kTextEncodingDOSArabic        = $0419;                        {  code page 864 }
  123.     kTextEncodingDOSNordic        = $041A;                        {  code page 865 }
  124.     kTextEncodingDOSRussian        = $041B;                        {  code page 866 }
  125.     kTextEncodingDOSGreek2        = $041C;                        {  code page 869, IBM Modern Greek }
  126.     kTextEncodingDOSThai        = $041D;                        {  code page 874, also for Windows }
  127.     kTextEncodingDOSJapanese    = $0420;                        {  code page 932, also for Windows }
  128.     kTextEncodingDOSChineseSimplif = $0421;                        {  code page 936, also for Windows }
  129.     kTextEncodingDOSKorean        = $0422;                        {  code page 949, also for Windows; Unified Hangul Code }
  130.     kTextEncodingDOSChineseTrad    = $0423;                        {  code page 950, also for Windows }
  131.     kTextEncodingWindowsLatin1    = $0500;                        {  code page 1252 }
  132.     kTextEncodingWindowsANSI    = $0500;                        {  code page 1252 (alternate name) }
  133.     kTextEncodingWindowsLatin2    = $0501;                        {  code page 1250, Central Europe }
  134.     kTextEncodingWindowsCyrillic = $0502;                        {  code page 1251, Slavic Cyrillic }
  135.     kTextEncodingWindowsGreek    = $0503;                        {  code page 1253 }
  136.     kTextEncodingWindowsLatin5    = $0504;                        {  code page 1254, Turkish }
  137.     kTextEncodingWindowsHebrew    = $0505;                        {  code page 1255 }
  138.     kTextEncodingWindowsArabic    = $0506;                        {  code page 1256 }
  139.     kTextEncodingWindowsBalticRim = $0507;                        {  code page 1257 }
  140.     kTextEncodingWindowsKoreanJohab = $0510;                    {  code page 1361, for Windows NT }
  141.                                                                 {  Various national standards begin at 0x600 }
  142.     kTextEncodingUS_ASCII        = $0600;
  143.     kTextEncodingJIS_X0201_76    = $0620;
  144.     kTextEncodingJIS_X0208_83    = $0621;
  145.     kTextEncodingJIS_X0208_90    = $0622;
  146.     kTextEncodingJIS_X0212_90    = $0623;
  147.     kTextEncodingJIS_C6226_78    = $0624;
  148.     kTextEncodingGB_2312_80        = $0630;
  149.     kTextEncodingGBK_95            = $0631;                        {  annex to GB 13000-93; for Windows 95 }
  150.     kTextEncodingKSC_5601_87    = $0640;                        {  same as KSC 5601-92 without Johab annex }
  151.     kTextEncodingKSC_5601_92_Johab = $0641;                        {  KSC 5601-92 Johab annex }
  152.     kTextEncodingCNS_11643_92_P1 = $0651;                        {  CNS 11643-1992 plane 1 }
  153.     kTextEncodingCNS_11643_92_P2 = $0652;                        {  CNS 11643-1992 plane 2 }
  154.     kTextEncodingCNS_11643_92_P3 = $0653;                        {  CNS 11643-1992 plane 3 (was plane 14 in 1986 version) }
  155.                                                                 {  ISO 2022 collections begin at 0x800 }
  156.     kTextEncodingISO_2022_JP    = $0820;
  157.     kTextEncodingISO_2022_JP_2    = $0821;
  158.     kTextEncodingISO_2022_CN    = $0830;
  159.     kTextEncodingISO_2022_CN_EXT = $0831;
  160.     kTextEncodingISO_2022_KR    = $0840;                        {  EUC collections begin at 0x900 }
  161.     kTextEncodingEUC_JP            = $0920;                        {  ISO 646, 1-byte katakana, JIS 208, JIS 212 }
  162.     kTextEncodingEUC_CN            = $0930;                        {  ISO 646, GB 2312-80 }
  163.     kTextEncodingEUC_TW            = $0931;                        {  ISO 646, CNS 11643-1992 Planes 1-16 }
  164.     kTextEncodingEUC_KR            = $0940;                        {  ISO 646, KS C 5601-1987 }
  165.                                                                 {  Misc standards begin at 0xA00 }
  166.     kTextEncodingShiftJIS        = $0A01;                        {  plain Shift-JIS }
  167.     kTextEncodingKOI8_R            = $0A02;                        {  Russian internet standard }
  168.     kTextEncodingBig5            = $0A03;                        {  Big-5 (has variants) }
  169.     kTextEncodingMacRomanLatin1    = $0A04;                        {  Mac OS Roman permuted to align with ISO Latin-1 }
  170.     kTextEncodingHZ_GB_2312        = $0A05;                        {  HZ (RFC 1842, for Chinese mail & news) }
  171.                                                                 {  Other platform encodings }
  172.     kTextEncodingNextStepLatin    = $0B01;                        {  NextStep encoding }
  173.                                                                 {  EBCDIC & IBM host encodings begin at 0xC00 }
  174.     kTextEncodingEBCDIC_US        = $0C01;                        {  basic EBCDIC-US }
  175.     kTextEncodingEBCDIC_CP037    = $0C02;                        {  code page 037, extended EBCDIC (Latin-1 set) for US,Canada... }
  176.                                                                 {  Special value }
  177.     kTextEncodingMultiRun        = $0FFF;                        {  Multi-encoding text with external run info }
  178.                                                                 {  The following are older names for backward compatibility }
  179.     kTextEncodingMacTradChinese    = 2;
  180.     kTextEncodingMacRSymbol        = 8;
  181.     kTextEncodingMacSimpChinese    = 25;
  182.     kTextEncodingMacGeez        = 28;
  183.     kTextEncodingMacEastEurRoman = 29;
  184.     kTextEncodingMacUninterp    = 32;
  185.  
  186. { TextEncodingVariant type & values }
  187.  
  188. TYPE
  189.     TextEncodingVariant                    = UInt32;
  190.  
  191. CONST
  192.                                                                 {  Default TextEncodingVariant, for any TextEncodingBase }
  193.     kTextEncodingDefaultVariant    = 0;                            {  Variants of kTextEncodingMacIcelandic                                                     }
  194.     kMacIcelandicStandardVariant = 0;                            {  0xBB & 0xBC are fem./masc. ordinal indicators }
  195.     kMacIcelandicTrueTypeVariant = 1;                            {  0xBB & 0xBC are fi/fl ligatures }
  196.                                                                 {  Variants of kTextEncodingMacJapanese }
  197.     kMacJapaneseStandardVariant    = 0;
  198.     kMacJapaneseStdNoVerticalsVariant = 1;
  199.     kMacJapaneseBasicVariant    = 2;
  200.     kMacJapanesePostScriptScrnVariant = 3;
  201.     kMacJapanesePostScriptPrintVariant = 4;
  202.     kMacJapaneseVertAtKuPlusTenVariant = 5;                        {  Variant options for most Japanese encodings (MacJapanese, ShiftJIS, EUC-JP, ISO 2022-JP)     }
  203.                                                                 {  These can be OR-ed into the variant value in any combination }
  204.     kJapaneseNoOneByteKanaOption = $20;
  205.     kJapaneseUseAsciiBackslashOption = $40;                        {  Variants of kTextEncodingMacArabic }
  206.     kMacArabicStandardVariant    = 0;                            {  0xC0 is 8-spoke asterisk, 0x2A & 0xAA are asterisk (e.g. Cairo) }
  207.     kMacArabicTrueTypeVariant    = 1;                            {  0xC0 is asterisk, 0x2A & 0xAA are multiply signs (e.g. Baghdad) }
  208.     kMacArabicThuluthVariant    = 2;                            {  0xC0 is Arabic five-point star, 0x2A & 0xAA are multiply signs }
  209.     kMacArabicAlBayanVariant    = 3;                            {  8-spoke asterisk, multiply sign, Koranic ligatures & parens }
  210.                                                                 {  Variants of kTextEncodingMacFarsi }
  211.     kMacFarsiStandardVariant    = 0;                            {  0xC0 is 8-spoke asterisk, 0x2A & 0xAA are asterisk (e.g. Tehran) }
  212.     kMacFarsiTrueTypeVariant    = 1;                            {  asterisk, multiply signs, Koranic ligatures, geometric shapes }
  213.                                                                 {  Variants of kTextEncodingMacHebrew }
  214.     kMacHebrewStandardVariant    = 0;
  215.     kMacHebrewFigureSpaceVariant = 1;                            {  Variants of Unicode & ISO 10646 encodings }
  216.     kUnicodeNoSubset            = 0;
  217.     kUnicodeNoCompatibilityVariant = 1;
  218.     kUnicodeMaxDecomposedVariant = 2;
  219.     kUnicodeNoComposedVariant    = 3;
  220.     kUnicodeNoCorporateVariant    = 4;                            {  Variants of Big-5 encoding }
  221.     kBig5_BasicVariant            = 0;
  222.     kBig5_StandardVariant        = 1;                            {  0xC6A1-0xC7FC: kana, Cyrillic, enclosed numerics }
  223.     kBig5_ETenVariant            = 2;                            {  adds kana, Cyrillic, radicals, etc with hi bytes C6-C8,F9 }
  224.                                                                 {  The following are older names for backward compatibility }
  225.     kJapaneseStandardVariant    = 0;
  226.     kJapaneseStdNoVerticalsVariant = 1;
  227.     kJapaneseBasicVariant        = 2;
  228.     kJapanesePostScriptScrnVariant = 3;
  229.     kJapanesePostScriptPrintVariant = 4;
  230.     kJapaneseVertAtKuPlusTenVariant = 5;                        {  kJapaneseStdNoOneByteKanaVariant = 6,    // replaced by kJapaneseNoOneByteKanaOption }
  231.                                                                 {  kJapaneseBasicNoOneByteKanaVariant = 7,    // replaced by kJapaneseNoOneByteKanaOption     }
  232.     kHebrewStandardVariant        = 0;
  233.     kHebrewFigureSpaceVariant    = 1;
  234.  
  235. { TextEncodingFormat type & values }
  236.  
  237. TYPE
  238.     TextEncodingFormat                    = UInt32;
  239.  
  240. CONST
  241.                                                                 {  Default TextEncodingFormat for any TextEncodingBase }
  242.     kTextEncodingDefaultFormat    = 0;                            {  Formats for Unicode & ISO 10646 }
  243.     kUnicode16BitFormat            = 0;
  244.     kUnicodeUTF7Format            = 1;
  245.     kUnicodeUTF8Format            = 2;
  246.     kUnicode32BitFormat            = 3;
  247.  
  248. { TextEncoding type }
  249.  
  250. TYPE
  251.     TextEncoding                        = UInt32;
  252. {  name part selector for GetTextEncodingName }
  253.     TextEncodingNameSelector            = UInt32;
  254.  
  255. CONST
  256.     kTextEncodingFullName        = 0;
  257.     kTextEncodingBaseName        = 1;
  258.     kTextEncodingVariantName    = 2;
  259.     kTextEncodingFormatName        = 3;
  260.  
  261. { Types used in conversion }
  262.  
  263. TYPE
  264.     TextEncodingRunPtr = ^TextEncodingRun;
  265.     TextEncodingRun = RECORD
  266.         offset:                    ByteOffset;
  267.         textEncoding:            TextEncoding;
  268.     END;
  269.  
  270.     ConstTextEncodingRunPtr                = ^TextEncodingRun;
  271.     ScriptCodeRunPtr = ^ScriptCodeRun;
  272.     ScriptCodeRun = RECORD
  273.         offset:                    ByteOffset;
  274.         script:                    ScriptCode;
  275.     END;
  276.  
  277.     ConstScriptCodeRunPtr                = ^ScriptCodeRun;
  278.     TextPtr                                = ^UInt8;
  279.     ConstTextPtr                        = ^UInt8;
  280. { Basic types for Unicode characters and strings: }
  281.     UniCharArrayPtr                        = ^UniChar;
  282.     ConstUniCharArrayPtr                = ^UniChar;
  283. {  enums for TextEncoding Conversion routines }
  284.  
  285. CONST
  286.     kTextScriptDontCare            = -128;
  287.     kTextLanguageDontCare        = -128;
  288.     kTextRegionDontCare            = -128;
  289.  
  290. {  struct for TECGetInfo }
  291.  
  292.  
  293. TYPE
  294.     TECInfoPtr = ^TECInfo;
  295.     TECInfo = RECORD
  296.         format:                    UInt16;                                    {  format code for this struct }
  297.         tecVersion:                UInt16;                                    {  TEC version in BCD, e.g. 0x0121 for 1.2.1 }
  298.         tecTextConverterFeatures: UInt32;                                {  bitmask indicating TEC features/fixes }
  299.         tecUnicodeConverterFeatures: UInt32;                            {  bitmask indicating UnicodeConverter features/fixes }
  300.         tecTextCommonFeatures:    UInt32;                                    {  bitmask indicating TextCommon features/fixes }
  301.         tecTextEncodingsFolderName: Str31;                                {  localized name of Text Encodings folder (pascal string) }
  302.         tecExtensionFileName:    Str31;                                    {  localized name of TEC extension (pascal string) }
  303.     END;
  304.  
  305.     TECInfoHandle                        = ^TECInfoPtr;
  306. {  Value for TECInfo format code }
  307.  
  308. CONST
  309.     kTECInfoCurrentFormat        = 1;                            {  any future formats will just add fields at the end }
  310.  
  311. {
  312.    Defined feature/fix bits for tecUnicodeConverterFeatures field
  313.    Bit:                                Meaning if set:
  314.    ----                                ---------------
  315.    kTECKeepInfoFixBit                Unicode Converter no longer ignores other control flags if
  316.                                       kUnicodeKeepInfoBit is set. Bug fix.
  317.    kTECFallbackTextLengthFixBit        Unicode Converter honors the *srcConvLen and *destConvLen
  318.                                       returned by caller-supplied fallback handler for any status
  319.                                       it returns except for kTECUnmappableElementErr (previously
  320.                                       it only honored these values if noErr was returned). Bug fix.
  321. }
  322.  
  323.     kTECKeepInfoFixBit            = 0;
  324.     kTECFallbackTextLengthFixBit = 1;
  325.  
  326.     kTECKeepInfoFixMask            = $00000001;
  327.     kTECFallbackTextLengthFixMask = $00000002;
  328.  
  329. {  Prototypes for TextEncoding functions }
  330.  
  331. FUNCTION CreateTextEncoding(encodingBase: TextEncodingBase; encodingVariant: TextEncodingVariant; encodingFormat: TextEncodingFormat): TextEncoding;
  332. FUNCTION GetTextEncodingBase(encoding: TextEncoding): TextEncodingBase;
  333. FUNCTION GetTextEncodingVariant(encoding: TextEncoding): TextEncodingVariant;
  334. FUNCTION GetTextEncodingFormat(encoding: TextEncoding): TextEncodingFormat;
  335. FUNCTION ResolveDefaultTextEncoding(encoding: TextEncoding): TextEncoding;
  336. FUNCTION GetTextEncodingName(iEncoding: TextEncoding; iNamePartSelector: TextEncodingNameSelector; iPreferredRegion: RegionCode; iPreferredEncoding: TextEncoding; iOutputBufLen: ByteCount; VAR oNameLength: ByteCount; VAR oActualRegion: RegionCode; VAR oActualEncoding: TextEncoding; oEncodingName: TextPtr): OSStatus; C;
  337. FUNCTION TECGetInfo(VAR tecInfo: TECInfoHandle): OSStatus;
  338.  
  339. FUNCTION UpgradeScriptInfoToTextEncoding(iTextScriptID: ScriptCode; iTextLanguageID: LangCode; iRegionID: RegionCode; iTextFontname: ConstStr255Param; VAR oEncoding: TextEncoding): OSStatus;
  340. FUNCTION RevertTextEncodingToScriptInfo(iEncoding: TextEncoding; VAR oTextScriptID: ScriptCode; VAR oTextLanguageID: LangCode; VAR oTextFontname: Str255): OSStatus;
  341.  
  342. {$ALIGN RESET}
  343. {$POP}
  344.  
  345. {$SETC UsingIncludes := TextCommonIncludes}
  346.  
  347. {$ENDC} {__TEXTCOMMON__}
  348.  
  349. {$IFC NOT UsingIncludes}
  350.  END.
  351. {$ENDC}
  352.